/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package md;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 *La clase ContraseñaMD maneja los datos de la tabla cuenta de la BDD
 * @author Enrico
 */
public class ContrasenaMD {

    private String contrasena;
    private String fechaIngreso;
    private int idContrasena;
    private int codigoCategoria;

    /**
     * Constructor vacio.
     * Settea los atributos a los valores por defecto
     */
    public ContrasenaMD() {
        this.contrasena = "";
        this.fechaIngreso = "";
        this.idContrasena = -1;
        this.codigoCategoria = -1;

    }

    /**
     * Metodo para ingresar una nueva contraseña en el sistema.
     *
     * @return Devuelve TRUE si es que se ingresa correctamente el registro en
     * la BDD.
     */
    public int ingresarContrasena(String contrasena, String fecha, int codigo) {
        boolean retorno = false;
        int max=0;
        String sql = "";
        System.out.println("EntreMDinsertar");
        sql = "INSERT INTO \"Contrasena\" " +
                "(\"contrasena\", \"fechaIngreso\", \"idContrasena\", \"codigoCategoria\")" +
                " VALUES ('" + contrasena +
                "', '" + fecha +
                "', '" + getidSiguiente() +
                "', '" + codigo + "')";

        System.out.println(sql);
        try {
            Statement stmt = Db.getDb().getConexion().createStatement();
            if (stmt.executeUpdate(sql) > 0) {
                max=getidMax();
                retorno = true;
            }
            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return max;
    }

    /**
     * Metodo para modificar una contraseña en el sistema.
     *
     * @return Devuelve TRUE si es que se modifica correctamente el registro en
     * la BDD.
     */

    public boolean modificarContrasena(String contrasena, String fecha, int id) {
        boolean retorno = false;
        String sql = "";
        System.out.println("EntreMDmodificar");
        sql = "UPDATE \"Contrasena\" SET" +
                "\"contrasena\"=\'" + contrasena + "\', \"fechaIngreso\"=\'" + fecha + "\'" +
                " WHERE \"idContrasena\"=" + id;

        System.out.println(sql);
        try {
            Statement stmt = Db.getDb().getConexion().createStatement();
            if (stmt.executeUpdate(sql) > 0) {
                retorno = true;
            }
            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return retorno;
    }

    /**
     * Metodo para eliminar una contraseña que existe en el sistema.
     *
     * @return Devuelve TRUE si es que se ingresa correctamente el registro en
     * la BDD.
     */

    public boolean eliminarContrasena(int id) {
        boolean retorno = false;
        String sql = "";
        System.out.println("EntreMDeliminar");
        sql = "DELETE FROM \"Contrasena\"" +
                " WHERE \"idContrasena\"=" + id;

        System.out.println(sql);
        try {
            Statement stmt = Db.getDb().getConexion().createStatement();
            if (stmt.executeUpdate(sql) > 0) {
                retorno = true;
            }
            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return retorno;
    }

    public boolean esFacil(String pal)
    {
        boolean retorno=true;
        int palabra=0;
         String sql = "SELECT count(\"palabra\")" +
                "FROM \"Diccionario\""+
                "WHERE \"palabra\"='"+pal+"'";
        try {
            Statement stmt = Db.getDb().getConexion().createStatement();
            ResultSet rset = stmt.executeQuery(sql);
            while (rset.next()) {
                palabra = rset.getInt(1);
                System.out.print(palabra);
                retorno=true;
                if(palabra==1)
                {
                    System.out.print("no entro");
                   retorno= false;
                }
            }
            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
            retorno=false;
        }
         return retorno;
    }

    /**
     * Muestra las TODAS cuentas disponible del usuario.
     * @return Duevuelve una lista con TODAS las cuentas disponibles par el
     * usuario
     */
    public List verContrasena() {
        List<String[]> retorno = new ArrayList<String[]>();

        String sql = "SELECT \"nombreCuenta\", \"nombreSistema\", \"contrasena\", \"codigoCategoria\",\"fechaIngreso\"" +
                "FROM \"Contrasena\", \"Cuenta\", \"Sistema\"" +
                "WHERE \"codigoUsuario\" = 2 AND" +
                "\"Cuenta\".\"idSistema\" = \"Sistema\".\"idSistema\" AND" +
                " \"Cuenta\".\"idContrasena\" = \"Contrasena\".\"idContrasena\"";
        try {
            Statement stmt = Db.getDb().getConexion().createStatement();
            ResultSet rset = stmt.executeQuery(sql);
            while (rset.next()) {

                String[] arr = {rset.getString("nombreCuenta"),
                    rset.getString("nombreSistema"),
                    rset.getString("contrasena"),
                    rset.getString("codigoCategoria"),
                    rset.getString("fechaIngreso"),};
                retorno.add(arr);
            }
            System.out.println(retorno);
            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }

        return retorno;
    }

        /***************************************
     * Getters & Setters
     ***************************************/

    public int getidMax(){
        int retorno = -1;
        String sql = "SELECT MAX(\"idContrasena\")" +
                "FROM \"Contrasena\"";
        try {
            Statement stmt = Db.getDb().getConexion().createStatement();
            ResultSet rset = stmt.executeQuery(sql);
            while (rset.next()) {
                retorno = rset.getInt(1);
            }
            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return retorno;
    }

     public int getidSiguiente(){
        int retorno = -1;
        String sql = "SELECT MAX(\"idContrasena\") + 1 " +
                "FROM \"Contrasena\"";
        try {
            Statement stmt = Db.getDb().getConexion().createStatement();
            ResultSet rset = stmt.executeQuery(sql);
            while (rset.next()) {
                retorno = rset.getInt(1);
            }
            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return retorno;
    }

    public String idPorPalabra(int id)
    {
        String palabra="";
         String sql = "SELECT \"contrasena\"" +
                "FROM \"Contrasena\""+
                "WHERE \"idContrasena\"="+id;
        try {
            Statement stmt = Db.getDb().getConexion().createStatement();
            ResultSet rset = stmt.executeQuery(sql);
            while (rset.next()) {
                palabra = rset.getString(1);
            }
            stmt.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }


        return palabra;

    }

    public int getCodigoCategoria() {
        return codigoCategoria;
    }

    public String getContrasena() {
        return contrasena;
    }

    public String getFechaIngreso() {
        return fechaIngreso;
    }

    public int getIdContrasena() {

        return idContrasena;
    }

    public void setCodigoCategoria(int codigoCategoria) {
        this.codigoCategoria = codigoCategoria;
    }

    public void setContrasena(String contrasena) {
        this.contrasena = contrasena;
    }

    public void setFechaIngreso(String fechaIngreso) {
        this.fechaIngreso = fechaIngreso;
    }

    public void setIdContrasena(int idContrasena) {
        this.idContrasena = idContrasena;
    }
}
